/// 本地存储服务
/// 
/// 基于SharedPreferences的本地存储封装
/// 使用单例模式，提供字符串、整数、布尔值的存储和读取
/// 
/// 作者: Fluttert Team
/// 日期: 2024

import 'package:shared_preferences/shared_preferences.dart';

/// 存储服务类
/// 
/// 提供统一的本地存储接口
/// 支持延迟初始化，只在首次使用时初始化SharedPreferences
class StorageService {
  /// 单例实例
  static StorageService? _instance;
  
  /// 获取单例实例
  static StorageService get instance {
    _instance ??= StorageService._();
    return _instance!;
  }

  /// SharedPreferences实例
  static SharedPreferences? _prefs;
  
  /// 确保SharedPreferences已初始化
  /// 
  /// 使用懒加载模式，只在首次使用时初始化
  static Future<void> _ensureInitialized() async {
    _prefs ??= await SharedPreferences.getInstance();
  }

  /// 私有构造函数，实现单例模式
  StorageService._();

  /// 存储字符串值
  /// 
  /// [key] 存储键
  /// [value] 存储值
  /// 返回存储是否成功
  Future<bool> setString(String key, String value) async {
    await _ensureInitialized();
    return await _prefs!.setString(key, value);
  }

  /// 读取字符串值
  /// 
  /// [key] 存储键
  /// 返回存储的值，如果不存在则返回null
  Future<String?> getString(String key) async {
    await _ensureInitialized();
    return _prefs!.getString(key);
  }

  /// 存储整数值
  /// 
  /// [key] 存储键
  /// [value] 存储值
  /// 返回存储是否成功
  Future<bool> setInt(String key, int value) async {
    await _ensureInitialized();
    return await _prefs!.setInt(key, value);
  }

  /// 读取整数值
  /// 
  /// [key] 存储键
  /// 返回存储的值，如果不存在则返回null
  Future<int?> getInt(String key) async {
    await _ensureInitialized();
    return _prefs!.getInt(key);
  }

  /// 存储布尔值
  /// 
  /// [key] 存储键
  /// [value] 存储值
  /// 返回存储是否成功
  Future<bool> setBool(String key, bool value) async {
    await _ensureInitialized();
    return await _prefs!.setBool(key, value);
  }

  /// 读取布尔值
  /// 
  /// [key] 存储键
  /// 返回存储的值，如果不存在则返回null
  Future<bool?> getBool(String key) async {
    await _ensureInitialized();
    return _prefs!.getBool(key);
  }

  /// 删除指定键的值
  /// 
  /// [key] 要删除的存储键
  /// 返回删除是否成功
  Future<bool> remove(String key) async {
    await _ensureInitialized();
    return await _prefs!.remove(key);
  }

  /// 清空所有存储数据
  /// 
  /// 返回清空是否成功
  Future<bool> clear() async {
    await _ensureInitialized();
    return await _prefs!.clear();
  }
}

